﻿using System;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Web.Script.Serialization;
using System.Web.Script.Services;
using System.Web.Services;
using ENT.GP.Core;
using ENT.GP.Core.Autenticacion;
using ENT.GP.Core.Core;
using ENT.GP.Core.Lookup;
using ENT.GP.Core.Proyecto;
using System.Linq;

namespace ENT.PM.Ws
{

    [WebServiceBinding(ConformsTo = (System.Web.Services.WsiProfiles)1)]
    [ToolboxItem(false)]
    //[WebService(Namespace = "http://172.16.17.33:8080/ENT.PM.Ws/")]
    [ScriptService]
    public class Service : WebService
    {

        public string RUTA_ARCHIVOS
        {
            get
            {
                return String.Format("{0}{1}", ConfigurationManager.AppSettings.Get("PathServer"), ConfigurationManager.AppSettings.Get("PathFiles"));
            }
        }

        public string RUTA_HOME
        {
            get
            {
                return String.Format("{0}{1}", ConfigurationManager.AppSettings.Get("PathServer"), "");
            }
        }
        public Service()
        {
        }

        
        [WebMethod]
        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public void GetFilter(int iCriterio,int idImpresa)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string JSON = js.Serialize("");
            try
            {

                switch (iCriterio)
                {
                    case 4:
                        //cbxProgramas
                        EstadoProyectoLookup dsReturnP = EstadoProyectoLookup.GetNameValueList(idImpresa);                       
                        JSON = js.Serialize(dsReturnP);
                        break;

                    case 3:     
                        //cbxEje
                        TipoLookup dsReturnT = TipoLookup.GetNameValueList(idImpresa);
                        JSON = js.Serialize(dsReturnT);
                        break;
                    case 1:
                        //cbxCategorias
                        EjesLookup dsReturnE = EjesLookup.GetNameValueList(idImpresa);
                        JSON = js.Serialize(dsReturnE);
                        break;
                    case 2:
                        //cbxEstado
                        ProgramaLookup dsReturnL = ProgramaLookup.GetNameValueList(idImpresa);
                        JSON = js.Serialize(dsReturnL);
                        break;
                }
            }
            catch (Exception ex)
            {
                string StrEx = ex.Message;
            }
            if (JSON.Length > 3)
            {
               JSON= JSON.Insert(1, "{\"Key\":0,\"Value\":\"Ninguno\"},");
            }
            JSON = "{\"filter\": " + JSON + "}";
            Context.Response.Write(JSON);
        }

        /// <summary>
        ///  Obtener imagenes
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns> 
        string getHtmlImagenes(int id)
        {
            var consulta = string.Format("SELECT  entpm_proyecto_documento.NOMBRE, entpm_proyecto_documento.TIPODOCUMENTO, entpm_empresa.NOMBRE AS EMPRESA, entpm_empresa.CODIGO, entpm_proyecto_documento.IDPROYECTO, entpm_empresa.IDEMPRESA FROM   entpm_proyecto   INNER JOIN entpm_empresa ON (entpm_proyecto.IDEMPRESA = entpm_empresa.IDEMPRESA)   INNER JOIN entpm_proyecto_documento ON (entpm_proyecto.IDPROYECTO = entpm_proyecto_documento.IDPROYECTO) WHERE  entpm_proyecto_documento.IDPROYECTO = {0} AND entpm_proyecto_documento.TIPO = 5 AND lower(  entpm_proyecto_documento.TIPOARCHIVO) like 'image%' ORDER BY entpm_proyecto_documento.ID DESC", id);
            //var consulta = string.Format("SELECT  entpm_proyecto_documento.NOMBRE, entpm_proyecto_documento.TIPODOCUMENTO, entpm_empresa.NOMBRE AS EMPRESA, entpm_empresa.CODIGO, entpm_proyecto_documento.IDPROYECTO, entpm_empresa.IDEMPRESA FROM   entpm_proyecto   INNER JOIN entpm_empresa ON (entpm_proyecto.IDEMPRESA = entpm_empresa.IDEMPRESA)   INNER JOIN entpm_proyecto_documento ON (entpm_proyecto.IDPROYECTO = entpm_proyecto_documento.IDPROYECTO) WHERE  entpm_proyecto_documento.IDPROYECTO = {0}  AND lower(  entpm_proyecto_documento.TIPOARCHIVO) like 'image%' ORDER BY entpm_proyecto_documento.ID DESC", id);
          
            var datos = Util.EjecutarConsulta(consulta);
            int conEnd = datos.Tables[0].Rows.Count;
            int con = 1;
            string ruta = "";
            string resultado = "";
            foreach (DataRow dato in datos.Tables[0].Rows)
            {
                if (dato[1].ToString() == ".png;base64")
                {
                    ruta = dato[0].ToString();
                    resultado += "{" + string.Format("\"html\":\"<img id='imagen{0}' alt='Base64 string {0}' src='{1}' ", con.ToString(), ruta) + "";
                    resultado += " width='{0}' height='{1}'/>\"}";
                }
                else
                {
                    ruta = string.Format("{0}resources/empresas/{1}/resources/load/{2}", RUTA_HOME, dato[3], dato[0]);
                    resultado += "{" + string.Format("\"html\":\"<img id='imagen{0}' src='{1}' ", con.ToString(), ruta) + "";
                    resultado += " width='{0}' height='{1}'/>\"}";
                }
                if (conEnd != con)
                    resultado += ",";
                con += 1;
            }
            return (resultado);
        }

        string getHtmlVideos(int id)
        {

            var consulta = string.Format("SELECT  entpm_proyecto_documento.NOMBRE, entpm_proyecto_documento.TIPODOCUMENTO, entpm_empresa.NOMBRE AS EMPRESA, entpm_empresa.CODIGO, entpm_proyecto_documento.IDPROYECTO, entpm_empresa.IDEMPRESA FROM   entpm_proyecto   INNER JOIN entpm_empresa ON (entpm_proyecto.IDEMPRESA = entpm_empresa.IDEMPRESA)   INNER JOIN entpm_proyecto_documento ON (entpm_proyecto.IDPROYECTO = entpm_proyecto_documento.IDPROYECTO) WHERE  entpm_proyecto_documento.IDPROYECTO = {0} AND entpm_proyecto_documento.TIPO = 5  AND lower( entpm_proyecto_documento.TIPOARCHIVO) like 'video%'", id);
            var datos = Util.EjecutarConsulta(consulta);
            int conEnd = datos.Tables[0].Rows.Count;
            int con = 1;
            string ruta = "";
            string resultado = "";
            string ifyoutube = "false";
            foreach (DataRow dato in datos.Tables[0].Rows)
            {
               
                ruta =dato[0].ToString().Trim();
                ifyoutube = "true";
                if (ruta.Substring(0, 4) != "http")
                {
                    ruta = string.Format("{0}resources/empresas/{1}/resources/load/{2}", RUTA_HOME, dato[3], dato[0]);
                    ifyoutube = "false";
                }
                resultado += "{" + string.Format("\"name\":\"Video {0}\", \"src\":\"{1}\", \"youtube\":\"{2}\"", con.ToString(), ruta, ifyoutube) + "}";
                if (conEnd != con)
                    resultado += ",";
                con += 1;
            }
            return (resultado);

        }
        string getHtmlDoc(int id)
        {

            var consulta = string.Format("SELECT  entpm_proyecto_documento.NOMBRE, entpm_proyecto_documento.TIPODOCUMENTO, entpm_empresa.NOMBRE AS EMPRESA, entpm_empresa.CODIGO, entpm_proyecto_documento.IDPROYECTO, entpm_empresa.IDEMPRESA FROM   entpm_proyecto   INNER JOIN entpm_empresa ON (entpm_proyecto.IDEMPRESA = entpm_empresa.IDEMPRESA)   INNER JOIN entpm_proyecto_documento ON (entpm_proyecto.IDPROYECTO = entpm_proyecto_documento.IDPROYECTO) WHERE  entpm_proyecto_documento.IDPROYECTO = {0} AND entpm_proyecto_documento.TIPO = 5  AND lower( entpm_proyecto_documento.TIPOARCHIVO) not like 'video%' AND lower( entpm_proyecto_documento.TIPOARCHIVO) not like 'image%'", id);
            var datos = Util.EjecutarConsulta(consulta);
            int conEnd = datos.Tables[0].Rows.Count;
            int con = 1;
            string ruta = "";
            string resultado = "\"children\":[";
          
            foreach (DataRow dato in datos.Tables[0].Rows)
            {
                 
                ruta = string.Format("{0}resources/empresas/{1}/resources/load/{2}", RUTA_HOME, dato[3], dato[0]);
                resultado += "{" + string.Format("\"cls\":\"file\", \"fileName\":\"{0}\", \"id\":\"file_{1}\", \"leaf\":true , \"path\":\"{2}\"", dato[0].ToString(), con,ruta) + "";
                resultado += "}";
                
                if (conEnd != con)
                    resultado += ",";
                con += 1;
            }
            resultado += "]";
            return (resultado);

        }
        [WebMethod]
        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public void GetHtmlResources(int id)
        { 
             string string_video = getHtmlVideos(id);
             string string_image = getHtmlImagenes(id);
             string string_documentos = getHtmlDoc(id);
             string JSON = "{\"imagenes\": [" + string_image + "],\"videos\": [" + string_video + "],\"documentos\": {" + string_documentos + "}}";
             Context.Response.Write(JSON);
        }
        [WebMethod]
        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public void GetLogin(string sUser, string sPass)
        {
            User cUserReturn = new User();
            try
            {
                Autenticacion auth;
                auth = Autenticacion.Execute(sUser, sPass);
                int  idTmp = 0;
                if (auth.Result)
                {
                    cUserReturn.Status = 1;
                    int.TryParse(auth.DatosUsuario.Tables[0].Rows[0][13].ToString(),out  idTmp);
                    cUserReturn.Nombre = string.Format("{0}", auth.DatosUsuario.Tables[0].Rows[0][2].ToString());
                    cUserReturn.Apellido = string.Format("{0}", auth.DatosUsuario.Tables[0].Rows[0][3].ToString());
                    cUserReturn.IdEmp =  idTmp;
                    int.TryParse(auth.DatosUsuario.Tables[0].Rows[0][9].ToString(), out  idTmp);
                    cUserReturn.IdRol = idTmp;
                    cUserReturn.Rol = string.Format("{0}", auth.DatosUsuario.Tables[0].Rows[0][10].ToString());
                    cUserReturn.CRol = string.Format("{0}", auth.DatosUsuario.Tables[0].Rows[0][12].ToString());
                }

            }
            catch (Exception ex)
            {
                cUserReturn.StrEx = ex.Message;
            }
            JavaScriptSerializer js = new JavaScriptSerializer();
            string JSON = "{\"user\": [" + js.Serialize(cUserReturn) + "]}";
            Context.Response.Write(JSON);
           
        }
              
        [WebMethod]
        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public void GetProyectoByFilter(string iProgramaId, string iEjeId, string iTipoId, string iEstadoId, string sText, string IdEmp)
        {
            ProyectoLista proyectoLista = null;
            try
            {
                int tmpVal = 0;
                ProyectoCriterio proyectoCriterio = ProyectoCriterio.NewProyectoCriterio();
                int.TryParse(iProgramaId, out tmpVal);
                proyectoCriterio.ProgramaId = tmpVal;
                int.TryParse(iEjeId, out tmpVal);
                proyectoCriterio.EjeId =  tmpVal;
                int.TryParse(iTipoId, out tmpVal);
                proyectoCriterio.TipoId =  tmpVal;
                int.TryParse(iEstadoId, out tmpVal);
                proyectoCriterio.EstadoId =  tmpVal;
                proyectoCriterio.Nombre = sText;
                int.TryParse(IdEmp, out tmpVal);
                proyectoCriterio.IdEmpresa = tmpVal;
                proyectoLista = ProyectoLista.GetProyectoLista(proyectoCriterio);
            }
            catch (Exception e)
            {
                string s1 = e.Message;
            }
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            Context.Response.Write(javaScriptSerializer.Serialize(proyectoLista));
        }
        [WebMethod]
        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public void GetRegiones(int type)
        {
            string s1 = "select proy.REGIONID as id,reg.VALITEMCAT as region,count(proy.IDPROYECTO )as numero, sum( proy.APORTEPLAN) as plan, sum( proy.APORTECONTRAPARTE) +  sum( proy.APORTECONTRAPARTE2) as contraparte,  sum( proy.COSTOTOTAL) as inversion ";
            bool flag = type != 1;
            if (!flag)
                s1 += "from   entpm_proyecto proy, entpm_catalogo reg where  proy.REGIONID =  reg.IDCATALOGO and  proy.REGIONID >1  group by proy.REGIONID";
            else
                s1 += "from   entpm_proyecto proy, entpm_catalogo reg where  proy.REGIONID =  reg.IDCATALOGO and  proy.REGIONID =1  group by proy.REGIONID";
            DataSet dataSet = Util.EjecutarConsulta(s1);
            myDataXml myDataXml = new myDataXml();
            Context.Response.Write(myDataXml.GetJSONString(dataSet.Tables[0]));
        }

        [WebMethod]
        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public void SetResources(int id, string myData)
        {
            Proyecto proyecto = Proyecto.GetProyecto(id);
            var seguimiento =
                 proyecto.ProyectosSupervisiones.FirstOrDefault(
                     s => s.Fecha.ToShortDateString() == DateTime.Now.ToShortDateString());
             if (seguimiento==null)
             {
                 seguimiento = ProyectoSupervision.NewProyectoSupervision();
                 seguimiento.IdProyecto = id;
                 seguimiento.Descripcion = "Avance del proyecto";
                 seguimiento.Fecha = DateTime.Now;
                 
             }

            //Example myData="iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAYAAABut3YUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPZJREFUeNpi/PX7LwOFwAyIG6HseiA+Ra5BjBQ6xg+IVwAxJ5T/HYgjgHgTOYYxUeCQUiBeh+QQBih7HVSOLiHDDMSTgTiTgLrpQJwLxH9p5RhOaLT4EakeFF3RQPyF2o6RhkaBGYkheRmIPYH4KbXSjC4QnyTDIch6danhGCcgPgwNGXKBNNQMb0ocEwXE24GYn4FyADJjI76Ej88x7UC8FIjZGKgHQDlxGtRsZmISMMjy+dBQoSXYBC0gv+NyDD80xzgx0AeAqg4fIH6NHk0qQHyMjg6B1WvHYDkNFjIgwS1ALMowMOAjEAeBHINe2Q0U+AUQYACQ10C2QNhRogAAAABJRU5ErkJggg==";
            //"{\"Created\":[{\"NombreArchivo\":\"data:image/png;base64," + myData  + "\",\"TamanoArchivo\":\"2291\",\"RutaArchivo\":\"\",\"TipoArchivo\":\"image\",\"TipoDocumento\":\".png;base64\",\"Tipo\":5}]}";
            try
            {
                Documento item = new Documento();
                item.NombreArchivo = "data:image/png;base64," + myData;
                item.TipoDocumento = ".png;base64";
                item.TipoArchivo    = "image";
                item.Tipo = 5;
                seguimiento.DocumentosSupervision.Add(item);
                if (seguimiento.IsNew)
                    proyecto.ProyectosSupervisiones.Add(seguimiento);
                proyecto.Save();
            }
            catch (Exception e)
            {
                string s1 = e.Message;
            }
            string JSON = "{\"status\": 200}";
            Context.Response.Write(JSON);

         }
        [WebMethod]
        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public void NewAvance(int id, int iAvance, string sObs)
        {
            Proyecto proyecto = Proyecto.GetProyecto(id);
            ProyectoAvance item = new ProyectoAvance();
            item.Avance = iAvance;
            item.FechaRegistro = DateTime.Now;
            item.Observacion = sObs;
            proyecto.Avances.Add(item);
            proyecto.Save();
            string JSON = "{\"status\": 200}";
            Context.Response.Write(JSON);

        }
    
    } // class Service

}
